Is it possible for markdown export to link to other files?

I exported a notebook to markdown (which is great), but I found that the files don't have links to other files like they were in Siyuan.

So, is there anyway to make markdown exports have links to other files?

    Related articles

    Welcome to here!

    Here we can learn from each other how to use SiYuan, give feedback and suggestions, and build SiYuan together.

    Signup About
    Please input reply content ...
    • adham
      Author

      I agree with @sagar that this is a very important feature which may increase SiYuan's popularity, especially against Obsidian.

    • MiscReply
    • adham
      Author

      Here's the before and after comparison.

      Before:

      
      # Networking
      
      The most important things to know are the networking protocols.
      
      
      * [TCP](siyuan://blocks/20231110002225-jzlfmvr)
      * [UDP](siyuan://blocks/20231111114912-9gi1l0p)
      * [HTTP](siyuan://blocks/20231110002250-b9w413n)
      * [TLS](siyuan://blocks/20231111114933-oti4rz4)
      * [WebSockets](siyuan://blocks/20231111115839-xw23n4k)
      * [WebRTC](siyuan://blocks/20231111114916-nevtkga)
      
      
      

      After:

      # Networking
      
      The most important things to know are the networking protocols.
      
      
      * [TCP](/Networking/TCP.md)
      * [UDP](/Networking/UDP.md)
      * [HTTP](/Networking/HTTP.md)
      * [TLS](/Networking/TLS.md)
      * [WebSockets](/Networking/WebSockets.md)
      * [WebRTC](/Networking/WebRTC.md)
      
      
      
    • adham 1
      Author

      I was able to do it (for documents only, not blocks, as I don't know how to find out if the link is of a block or a document, and I don't want to mutate the linked documents anyway).

      Here's the Python script:

      import os
      import re
      import requests
      
      # Replace 'YOUR_API_ENDPOINT' with the actual Siyuan API endpoint
      SIYUAN_API_ENDPOINT = "http://localhost:6806"
      
      
      # Function to make a SQL query to Siyuan API
      def query_block_details(block_id):
          query = {"stmt": f"SELECT * FROM blocks WHERE id='{block_id}'"}
          response = requests.post(f"{SIYUAN_API_ENDPOINT}/api/query/sql", json=query)
          return response.json()
      
      
      # Function to process each markdown file
      def process_markdown_file(file_path):
          with open(file_path, "r", encoding="utf-8") as file:
              content = file.read()
      
              # Use regex to find instances of [Anchor text](siyuan://blocks/block-id)
              matches = re.findall(r"\[.*?\]\(siyuan://blocks/(.*?)\)", content)
      
              for block_id in matches:
                  # Query Siyuan API to get block details
                  result = query_block_details(block_id)
      
                  # Assumes ref is of a document, not a block
                  if result:
                      hpath_value = result["data"][0].get("hpath")
      
                      # Replace the siyuan://blocks/block-id with hpath_value.md
                      new_link = f"({hpath_value}.md)"
      
                      # Replace the old link in the content
                      content = content.replace(f"(siyuan://blocks/{block_id})", new_link)
      
          # Write the updated content back to the file
          with open(file_path, "w", encoding="utf-8") as file:
              file.write(content)
      
      
      def process_markdown_directory(directory_path):
          for root, _, files in os.walk(directory_path):
              for file_name in files:
                  if file_name.endswith(".md"):
                      file_path = os.path.join(root, file_name)
                      process_markdown_file(file_path)
      
      
      # Replace 'YOUR_MARKDOWN_DIRECTORY_PATH' with the actual path to your exported markdown files
      markdown_directory_path = "YOUR_MARKDOWN_DIRECTORY_PATH"
      
      # Process each markdown file in the specified path
      process_markdown_directory(markdown_directory_path)
      
      
    • 88250

      The reason why this function is placed at the notebook level is because some users no longer want to use SiYuan and need complete batch export, so support for this function is not considered at the document level.

      I'm not sure if the span tag still exists after pandoc converts the HTML, but I'm sure anchor jumps can be used and you can write HTML tests in the browser.

      1 Reply
    • Visit all replies